using System;
using System.Collections.Generic;

namespace FormicArch.Architecture.Module
{
    public interface IModule
    {
        string Name { get; }
        bool IsInitialized { get; }
        void Initialize();
        void Update();
        void Dispose();
        IModule GetParentModule();
        IReadOnlyList<IModule> GetChildModules();
        void AddChildModule(IModule module);
        void RemoveChildModule(IModule module);
        T GetModule<T>() where T : IModule;
    }
}